package ulht.ia;

import java.util.HashMap;
import Interface.*;

/**
 *
 * @author Administrador
 */
public class Salas {
// formato da lista é "código", "identificador da sala"
    private HashMap<String, String> listaSalas = new HashMap<>();

    /**
     * Devolve um hashmap com a lista de salas
     * @return HashMap<String, String> 
     */
    public HashMap<String, String> getListaSalas() {
        return listaSalas;
    }

    /**
     * Carrega um hashmap para a lista de salas
     * @param HashMap<String, String> listaSalas 
     */
    public void setListaSalas(HashMap<String, String> listasalas) {
        this.listaSalas = listasalas;
    }

    /**
     * Carrega os valores por defeito: 5 salas
     */
    private void loadDefaults(){
        this.listaSalas.put("00", "sem sala");
        this.listaSalas.put("01", "S1");
        this.listaSalas.put("02", "S2");
        this.listaSalas.put("03", "S3");
        this.listaSalas.put("04", "S4");
        this.listaSalas.put("05", "S5");
    }
    
    /**
     * Adiciona uma sala à Lista de salas
     * 
     * @param codigo
     * @param nome 
     */
    public void addSala(String codigo, String nome){
        this.listaSalas.put(codigo, nome);
    }
    
    /**
     * Remove uma sala da lista de salas
     * 
     * @param codigo
     * @return True se removido, False se código nao existir
     */
    public boolean removeSala(String codigo){
        if (this.listaSalas.containsKey(codigo)){
            this.listaSalas.remove(codigo);
            return true;
        }
        return false;
    }
    
    /**
     * Edita uma sala (remove a sala existente e cria uma nova)
     * 
     * @param codigo
     * @param novoCodigo
     * @param nome
     * @return 1 se Ok, 0 se o novo código já existe, -1 se o código não existe
     */
    public int editSala(String codigo, String novoCodigo, String nome){
        if (novoCodigo.equals(codigo)){
            if (this.listaSalas.containsKey(codigo)){
                this.listaSalas.remove(codigo);
                this.listaSalas.put(novoCodigo, nome);
                return 1;
                } else {
                    return -1;
                }
        } else if (this.listaSalas.containsKey(codigo)){
            if (!this.listaSalas.containsKey(novoCodigo)){
                this.listaSalas.remove(codigo);
                this.listaSalas.put(novoCodigo, nome);
                return 1;
            } else {
                return 0;
            }
        }
        return -1;
    }

    /**
     * Constructor por defeito
     */
    public Salas() {
        this.loadDefaults();
    }
    
    /**
     * Constructor com lista de salas por parâmetro
     */
    public Salas(HashMap<String, String> listaSalas){
        this.setListaSalas(listaSalas);
    }
    
}
